﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Xml;
using System.Xml.XPath;
using System.IO;
using ExcelSax;

using System.Reflection;


namespace ExcelBySax {
    class Program {
        static void Main(string[] args) {
            //ExcelSax.UT.RessourceLoader l = new ExcelSax.UT.RessourceLoader(ExcelSax.UT.RessourceLoader.ExcelSaxUTAssemblyName);
            //l.GetRessourceToFile("ExcelSax.UT.Ressources.tests.xlsx", "abc.xlsx");


            // ================================================================
            // tests d'intégration de ExcelSax
            // ----------------------------------------------------------------
            //String fileName = args[0];
            //String sheetName = args[1];
            //Console.WriteLine("lecture de {0} {1}", fileName, sheetName);

            //DateTime t0 = DateTime.Now;
            //StringBuilder sb = new StringBuilder(5000);
            //using (StreamWriter sw = new StreamWriter("dest.csv")) {
            //    using (ExcelSaxConnection esc = new ExcelSaxConnection(fileName)) {
            //        foreach (ExcelSax.Sheet s in esc.Sheets) {
            //            Console.WriteLine("{0}", s.Name);
            //        }
            //        using (ExcelSaxDataReader esdr = esc.GetReaderForSheet(sheetName)) {
            //            while (esdr.Read()) {

            //                sb.Clear();
            //                foreach (var o in esdr) {
            //                    sb.AppendFormat("{0};", o);
            //                }
            //                sw.WriteLine(sb.ToString());
            //            }
            //            Console.WriteLine("bilan temps total {0}", DateTime.Now.Subtract(t0).TotalSeconds);
            //        }
            //    }
            //}

            // ================================================================
            // Maquettages divers
            // ----------------------------------------------------------------
            //using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) {
            //    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;

            //    #region test1

            //    //foreach (var v in workbookPart.Workbook.Sheets) {
            //    //    if (v.GetAttribute("name", "").Value != "Feuil1") continue;
            //    //    Console.WriteLine("{0} : {1} : {2}", v.GetAttribute("id", "http://schemas.openxmlformats.org/officeDocument/2006/relationships").Value, v.GetAttribute("sheetId", "").Value, v.GetAttribute("name", "").Value);
            //    //    WorksheetPart wkp = (WorksheetPart)workbookPart.GetPartById(v.GetAttribute("id", "http://schemas.openxmlformats.org/officeDocument/2006/relationships").Value);
            //    //    SheetData ds = wkp.Worksheet.GetFirstChild<SheetData>();
            //    //    OpenXmlReader reader = OpenXmlReader.Create(ds);
            //    //    while (reader.Read()) {
            //    //        if (reader.ElementType == typeof(Row)) {
            //    //            break;
            //    //        }
            //    //    }
            //    //    string text;
            //    //    Int32 i = 0;
            //    //    while (!reader.EOF && reader.ElementType == typeof(Row)) {
            //    //        Console.Write("{0,7}:", i++);
            //    //        OpenXmlElement oxe = reader.LoadCurrentElement();
            //    //        OpenXmlReader le = OpenXmlReader.Create(oxe);
            //    //        //while (le.Read()) {
            //    //        //    if (le.ElementType == typeof(CellValue)) {
            //    //        //        text = le.GetText();
            //    //        //        Console.Write(text + " ");
            //    //        //    }
            //    //        //}
            //    //        le.Close();
            //    //        Console.WriteLine();
            //    //        reader.ReadNextSibling();
            //    //    }
            //    //    reader.Close();
            //    //}

            //    #endregion

            //    #region test 2

            //    //foreach (var v in workbookPart.Workbook.Sheets) {
            //    //    if (v.GetAttribute("name", "").Value != "Feuil1") continue;
            //    //    Console.WriteLine("{0} : {1} : {2}", v.GetAttribute("id", "http://schemas.openxmlformats.org/officeDocument/2006/relationships").Value, v.GetAttribute("sheetId", "").Value, v.GetAttribute("name", "").Value);
            //    //    WorksheetPart wkp = (WorksheetPart)workbookPart.GetPartById(v.GetAttribute("id", "http://schemas.openxmlformats.org/officeDocument/2006/relationships").Value);
            //    //    OpenXmlReader reader = OpenXmlReader.Create(wkp);
            //    //    while (reader.Read()) {
            //    //        if (reader.ElementType == typeof(Row)) {
            //    //            break;
            //    //        }
            //    //    }
            //    //    //string text;
            //    //    Int32 i = 0;
            //    //    while (!reader.EOF && reader.ElementType == typeof(Row)) {
            //    //        Console.Write("{0,7}:", i++);
            //    //        OpenXmlElement oxe = reader.LoadCurrentElement();
            //    //        OpenXmlReader le = OpenXmlReader.Create(oxe);
            //    //        //while (le.Read()) {
            //    //        //    if (le.ElementType == typeof(CellValue)) {
            //    //        //        text = le.GetText();
            //    //        //        Console.Write(text + " ");
            //    //        //    }
            //    //        //}
            //    //        le.Close();
            //    //        Console.WriteLine();
            //    //        reader.ReadNextSibling();
            //    //    }                    
            //    //    Console.WriteLine();
            //    //    reader.Close();
            //    //}

            //    #endregion

            //    NameTable zxnt = new NameTable();
            //    XmlNamespaceManager nsmanager = new XmlNamespaceManager(zxnt);
            //    nsmanager.AddNamespace("def", "http://schemas.openxmlformats.org/spreadsheetml/2006/main");

            //    XElement xess = XElement.Load(XmlReader.Create(workbookPart.SharedStringTablePart.GetStream()));
            //    foreach (WorksheetPart wkp in workbookPart.WorksheetParts) {
            //        //XElement.Load(XmlReader.Create(worksheetPart.GetStream()));


            //        OpenXmlReader reader = OpenXmlReader.Create(wkp);
            //        String text;
            //        Boolean isString;
            //        while (reader.Read()) {
            //            if (reader.ElementType == typeof(Row)) {
            //                Console.WriteLine();
            //            }
            //            if (reader.ElementType == typeof(Cell)) {
            //                isString = false;
            //                if (reader.HasAttributes) {
            //                    String abc = (from att in reader.Attributes
            //                                  where att.LocalName == "t"
            //                                  select att.Value).FirstOrDefault();
            //                    if (abc == "s") isString = true;
            //                }
            //                while (!reader.EOF && reader.ElementType != (typeof(CellValue))) reader.Read();
            //                if (reader.ElementType == typeof(CellValue)) {
            //                    text = reader.GetText();
            //                    if ( isString ) {
            //                        XElement xo = xess.XPathSelectElement("./def:si[position()="+(Int32.Parse(text) + 1).ToString() +"]/def:t[1]", nsmanager);
            //                        if (xo != null) text = xo.Value; else text = String.Empty;
            //                    } 
            //                    Console.Write(text + " | ");
            //                }
            //                while (!reader.EOF && reader.ElementType != (typeof(Cell))) reader.Read();
            //            }
            //        }
            //        Console.WriteLine();
            //        reader.Close();
            //    }
            //}
        }
    }
    
}
